package service

import (
	"flag"
	log "hermestrans/basis/log"
	config "hermestrans/internal/portal/config"
	mgr "hermestrans/internal/portal/manager"
	router "hermestrans/internal/portal/router"
	"testing"

	"github.com/sirupsen/logrus"
)

var (
	confFile string
	help     bool
	version  bool
)

func init() {
	initArgs()
}

func initArgs() {
	//解析命令行参数
	flag.StringVar(&confFile, "conf", "config/portal.toml", "加载配置")
	flag.BoolVar(&help, "help", false, "帮助")
	flag.BoolVar(&version, "version", false, "版本")
	testing.Init()
	flag.Parse()
}

func startService() {
	var (
		err      error
		conf     = config.InitConf(confFile)
		mgoMgr   *mgr.MgoMgr
		mysqlMgr *mgr.MysqlMgr
		redisMgr *mgr.RedisMgr
	)
	//初始化日志配置
	if err = log.InitLog(conf.LogConfig); err != nil {
		logrus.Error(err.Error(), "init log fail")
		return
	}

	// mongo数据库模块初始化
	if mgoMgr, err = mgr.InitMgoManager(conf); err != nil {
		logrus.Error(err.Error(), "init mongo task db fail")
		return
	}
	// mysql数据库初始化
	if mysqlMgr, err = mgr.InitMysqlManager(conf); err != nil {
		logrus.Error(err.Error(), "init mysql db fail")
	}

	//redis模块初始化
	if redisMgr, err = mgr.InitRedisManager(conf); err != nil {
		logrus.Error(err.Error(), "init redis fail")
		return
	}

	// 启动Api 服务
	if err = router.InitRouter(conf, mysqlMgr, mgoMgr, redisMgr); err != nil {
		logrus.Error(err.Error(), "new router fail")
		return
	}
}

func Start() {
	startService()
}

func Stop() {
	logrus.Info("close done")
}
